#ifndef _QUEUE_ARRAY_H_
#define _QUEUE_ARRAY_H_

template<class Type>
class queueADT
{
public:
    virtual bool isEmpty()const = 0;
    virtual bool isFull()const = 0;
    virtual void initializeQueue() = 0;
    virtual Type front()const = 0;
    virtual Type back()const = 0;
    virtual void addElem(const Type&) = 0;
    virtual void deleteElem() = 0;
    virtual int queueLen()const = 0;
};

template<class Type>
class queueArr :public queueADT<Type>
{
public:
	const queueArr<Type>& operator=(const queueArr<Type>&);
	bool isEmpty()const;
	bool isFull()const;
	void initializeQueue();
	Type front()const;
	Type back()const;
	int queueLen()const;
	void addElem(const Type&);
	void deleteElem();
	queueArr(int size = 100);
	queueArr(const queueArr<Type>&);
	~queueArr();
	void printQueue()const;
private:
	int maxSize;
	int head;
	int tail;
	Type* headPtr;
};





 #endif

